#!/bin/bash

# ERP Mock Server 热更新脚本（适用于已运行的服务）
echo "🔄 开始 ERP Mock Server 热更新..."

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# 配置
APP_DIR="/opt/erp-mock"
LOG_FILE="logs/app.log"

# 1. 检查当前工作目录
echo -e "${BLUE}📍 检查当前位置...${NC}"
if [ ! -f "main.py" ]; then
    echo -e "${YELLOW}⚠️ 未在正确目录，切换到应用目录...${NC}"
    cd $APP_DIR
fi

if [ ! -f "main.py" ]; then
    echo -e "${RED}❌ 找不到main.py文件，请确认在正确目录${NC}"
    exit 1
fi

echo -e "${GREEN}✅ 位置确认：$(pwd)${NC}"

# 2. 备份当前运行的服务状态
echo -e "${BLUE}💾 记录当前服务状态...${NC}"
CURRENT_PID=$(ps aux | grep "[p]ython.*main.py" | awk '{print $2}')
if [ ! -z "$CURRENT_PID" ]; then
    echo -e "${GREEN}✅ 发现运行中的服务 (PID: $CURRENT_PID)${NC}"
else
    echo -e "${YELLOW}⚠️ 未发现运行中的ERP Mock服务${NC}"
fi

# 3. 停止当前服务
echo -e "${BLUE}🛑 停止当前服务...${NC}"
if [ ! -z "$CURRENT_PID" ]; then
    kill $CURRENT_PID
    sleep 3

    # 确保进程已停止
    if ps -p $CURRENT_PID > /dev/null 2>&1; then
        echo -e "${YELLOW}⚠️ 进程仍在运行，强制停止...${NC}"
        kill -9 $CURRENT_PID
        sleep 2
    fi
    echo -e "${GREEN}✅ 服务已停止${NC}"
fi

# 4. 拉取最新代码
echo -e "${BLUE}📥 拉取最新代码...${NC}"
git stash push -m "Auto stash before hot update $(date)" 2>/dev/null || true
git pull origin master

if [ $? -eq 0 ]; then
    echo -e "${GREEN}✅ 代码更新成功${NC}"
else
    echo -e "${RED}❌ 代码更新失败${NC}"
    exit 1
fi

# 5. 检查虚拟环境并安装依赖
echo -e "${BLUE}🔍 检查虚拟环境...${NC}"
if [ -f "venv/bin/activate" ]; then
    echo -e "${GREEN}✅ 发现虚拟环境${NC}"
    source venv/bin/activate

    # 更新依赖（如果需要）
    pip install -r requirements.txt --quiet
    PYTHON_CMD="venv/bin/python"
else
    echo -e "${YELLOW}⚠️ 未发现虚拟环境，使用系统Python${NC}"
    PYTHON_CMD="python3"
fi

# 6. 确保日志目录存在
mkdir -p logs

# 7. 启动新服务
echo -e "${BLUE}🚀 启动更新后的服务...${NC}"
nohup $PYTHON_CMD main.py > $LOG_FILE 2>&1 &
NEW_PID=$!

echo -e "${GREEN}✅ 服务已启动 (PID: $NEW_PID)${NC}"

# 8. 等待服务启动并验证
echo -e "${BLUE}⏳ 等待服务启动...${NC}"
sleep 5

# 检查进程是否还在运行
if ps -p $NEW_PID > /dev/null 2>&1; then
    echo -e "${GREEN}✅ 进程运行正常${NC}"
else
    echo -e "${RED}❌ 进程启动失败${NC}"
    echo -e "${YELLOW}查看日志：tail -20 $LOG_FILE${NC}"
    exit 1
fi

# 9. 健康检查
echo -e "${BLUE}🔍 进行健康检查...${NC}"
sleep 3

HEALTH_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3003/health)
if [ "$HEALTH_STATUS" == "200" ]; then
    echo -e "${GREEN}✅ 健康检查通过${NC}"
else
    echo -e "${YELLOW}⚠️ 健康检查失败 (HTTP: $HEALTH_STATUS)，服务可能仍在启动${NC}"
fi

# 10. 测试新的检验单查询接口
echo -e "${BLUE}🧪 测试新功能...${NC}"
INSPECTION_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -X POST http://localhost:3003/mock/yonbip/QMS_QIT/checkapply/list -H "Content-Type: application/json" -d '{"pageIndex":1,"pageSize":3}')

if [ "$INSPECTION_STATUS" == "200" ]; then
    echo -e "${GREEN}✅ 检验单查询接口测试通过${NC}"
else
    echo -e "${YELLOW}⚠️ 检验单查询接口测试失败 (HTTP: $INSPECTION_STATUS)${NC}"
fi

# 11. 显示结果
echo ""
echo "=================================================="
echo -e "${GREEN}🎉 热更新完成！${NC}"
echo "=================================================="
echo -e "${BLUE}📊 服务信息:${NC}"
echo "• 进程ID: $NEW_PID"
echo "• 工作目录: $(pwd)"
echo "• 日志文件: $LOG_FILE"
echo ""
echo -e "${BLUE}🌐 访问地址:${NC}"
echo "• 健康检查: http://your-server-ip:3003/health"
echo "• 管理界面: http://your-server-ip:3003/admin"
echo "• 新功能: 检验管理标签页"
echo ""
echo -e "${BLUE}📝 管理命令:${NC}"
echo "• 查看日志: tail -f $LOG_FILE"
echo "• 查看进程: ps aux | grep python | grep main.py"
echo "• 停止服务: kill $NEW_PID"
echo ""
echo -e "${YELLOW}💡 提示: 检查Web界面的'检验管理'标签页验证新功能${NC}"